public class Test {
    public static void main(String[] args) {

    }
    public int maxProfit(int[] prices) {
        int n = prices.length;
        if(n==1) return 0;
        int[][] dp = new int[n][3];
        //dp[i]表示，第i天结束以后，达到的最大利润。当天买入股票，当天就可以出售
        dp[0][0] = -prices[0];
        //第一列dp[i][0]：当天手里有股票，可卖出（已经买了股票）---当天选择买股票或者不买不卖
        //第二轮dp[i][1]：手里没有股票，且不处于冷冻期，可以买股票---不买股票
        //第三列dp[i][2]：处于冷冻期---当天选择把股票卖出去
        for(int i=1;i<n;i++) {
            dp[i][0] = Math.max(dp[i-1][0],(dp[i-1][1]-prices[i]));
            dp[i][1] = Math.max(dp[i-1][2],dp[i-1][1]);
            dp[i][2]  =dp[i-1][0] + prices[i];
        }
        int max = dp[n-1][0];
        for(int i=1;i<3;i++) {
            if(max < dp[n-1][i])
                max = dp[n-1][i];
        }
        return max;
    }
}
